// 文件名：queue_pipeline_buffer.cpp
// 目的：用多个 std::queue 模拟流水线各阶段的缓冲队列，实现分阶段加工与传递。
// 流程：
//   - Stage 0：数据源 -> 推入 stage1；
//   - Stage 1：平方处理 -> 推入 stage2；
//   - Stage 2：加 10 处理 -> 推入 stage3；
//   - Stage 3：消费 -> 收集到向量 result；
// 特性：各阶段解耦，天然支持批处理；若改为流式并行可按阶段独立线程+互斥/无锁队列。
// 复杂度：每阶段线性 O(N)，整体 O(N)。
#include <iostream>
#include <numeric>
#include <queue>
#include <vector>

int main() {
    std::queue<int> stage1;
    std::queue<int> stage2;
    std::queue<int> stage3;

    // Stage 0: 数据源
    for (int i = 1; i <= 5; ++i) {
        stage1.push(i);
    }

    // Stage 1: 加工 -> push 到 stage2
    while (!stage1.empty()) {
        int x = stage1.front();
        stage1.pop();
        stage2.push(x * x); // 平方
    }

    // Stage 2: 再加工 -> push 到 stage3
    while (!stage2.empty()) {
        int x = stage2.front();
        stage2.pop();
        stage3.push(x + 10);
    }

    // Stage 3: 终端消费
    std::vector<int> result;
    while (!stage3.empty()) {
        result.push_back(stage3.front());
        stage3.pop();
    }

    std::cout << "Pipeline result: ";
    for (int value : result) {
        std::cout << value << ' ';
    }
    std::cout << '\n';

    return 0;
}